package com.cskaoyan.javase.io._5print;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

/**
 * 定义一个类Printer，类中定义一个成员变量OutputStream out并提供单参构造器。
 * 随之提供5个成员方法：
 * 向文件中写入int值 public void printInt(int a)
 * 向文件中写入int值 并且换行 public void printIntLn(int a)
 * 向文件中写入double值 public void printDouble(double a)
 * 向文件中写入double值 并且换行 public void printDoubleLn(double a)
 * 释放资源 public void close()
 *
 * 在Java开发中,类似以上将各种数据直接无脑当成一个字符串,打印输出到一个(文件中,网路)中
 * 这种需求是很常见的
 * 于是Java IO提供了打印流来实现这个功能
 * 关于打印流,需要明确以下两点:
 *      1.打印显然是一种输出向的操作，所以打印流只有输出流，没有输入流，只能写不能读。
 *      2.打印流的核心目的是将Java各种数据类型（包括基本/引用数据类型）的数据转换成字符串，然后进行字符串的输出/写操作。
 * 打印流又可以分为两种形式：
 *      1.字节打印流
 *      2.字符打印流
 * @since 16:28
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) throws IOException {
        Printer print = new Printer(new FileOutputStream("a.txt"));
        /*
            100010002000
            2000
            3000

         */
        print.printInt(1000);
        print.printInt(1000);
        print.printIntLn(2000);
        print.printIntLn(2000);
        print.printIntLn(3000);
        print.close();
    }
}

class Printer {
    private OutputStream out;
    private static final String filePath = "a.txt";

    public Printer(OutputStream out) {
        this.out = out;
    }

    // 向文件中写入int值 public void printInt(int a)
    public void printInt(int a) throws IOException {
        // int --> String
        // String类的静态成员方法valueOf
        String aStr = String.valueOf(a);
        out.write(aStr.getBytes());
        // int num = Integer.parseInt("123");
    }

    // 向文件中写入int值 并且换行 public void printIntLn(int a)
    public void printIntLn(int a) throws IOException {
        // int --> String
        // String类的静态成员方法valueOf
        String aStr = String.valueOf(a);
        out.write(aStr.getBytes());
        out.write(System.lineSeparator().getBytes());
        // int num = Integer.parseInt("123");
    }

    // 向文件中写入double值 public void printDouble(double a)
    // 向文件中写入double值 并且换行 public void printDoubleLn(double a)
    // 释放资源 public void close()
    public void close() throws IOException {
        out.close();
    }
}